package work1.work6.ktv;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Author admin
 * @Date 2019/4/3 8:14
 * 工具类（具体实现类），实现歌曲的相关功能/操作
 */
public class SongDaoImp implements SongDao{
    /* 将所有歌曲对象都保存在ArrayList*/
    ArrayList<Song> arrayList=new ArrayList<Song>();

    /**
     * 初始化列表
     */
    @Override
    public void init() {
        Song song1=new Song("夜曲");
        Song song2=new Song("稻香");
        Song song3=new Song("快乐的小青蛙");
        Song song4=new Song("小幸运");
        arrayList.add(song1);
        arrayList.add(song2);
        arrayList.add(song3);
        arrayList.add(song4);
        System.out.print("初始化歌曲列表：");
        Iterator iterator =arrayList.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());
        }
        System.out.println();
    }

    /**
     * 将歌曲添加到列表中
     * @param song
     */
    @Override
    public void add(Song song) {
        arrayList.add(song);
        System.out.println("已添加歌曲："+song.getName());
    }

    /**
     * 展示歌曲列表
     */
    @Override
    public void all() {
        System.out.print("当前歌曲列表：");
        Iterator iterator =arrayList.iterator();
        while (iterator.hasNext()){
            Song song= (Song) iterator.next();
            System.out.print(song.getName()+"\t");
        }
        System.out.println();
    }

    /**
     * 置顶歌曲：判断列表中是否有歌曲
     * @param name
     */
    @Override
    public void top(String name) {
        /* 调用方法完成判断是否存在该歌曲*/
        Song song=select(name);
        if(song==null){
            System.out.println("当前歌曲列表没有此歌曲");
        }else{
            /* 完成置顶操作：
             *  1）找到歌曲名对应的歌曲对象(已经返回了)
             *  2）列表中删除该对象
             *  3）将该对象添加到列表的第一项*/
            arrayList.remove(song);
            arrayList.add(0,song);
            System.out.println("已将歌曲"+song.getName()+"置顶");
        }
    }

    /**
     * 判断列表中是否存在该歌曲
     * @param name
     * @return
     */
    @Override
    public Song select(String name) {
        for (int i = 0; i <arrayList.size() ; i++) {
            if(arrayList.get(i).getName().equals(name)){
                return arrayList.get(i);
            }
        }
        return null;
    }

    /**
     * 将歌曲前移一位
     * @param music
     */
    @Override
    public void before(Song music) {
        /* 找到该歌曲的索引/位置/下标 */
        int index=arrayList.indexOf(music);
        /* 前移： 一种方法： 先删除，再添加
         *         一种方法： 用set返回完成替换操作*/
        arrayList.remove(music);
        arrayList.add(index-1,music);
    }
}
